/***************************************************************************//**
 * @file     csa37f7x_timer1.h
 * @version  V1.0.0
 * @author   cs2040
 * @date     2020-09-26 PM
 * @brief    该文件包含了TIM1各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
 * @attention
 *  硬件平台: CSA37F70 评估板V1.0 \n
 *  SDK版本： CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date        <th>Version  <th>Author    <th>Description
 * <tr><td>2020-09-26  <td>1.0.0    <td>Chipsea MCU Group  <td>创建初始版本
 * </table>
 *
 *****************************************************************************/

#ifndef __CSA37F7X_TIMER1_H__
#define __CSA37F7X_TIMER1_H__

// Include external header file.
#include "csa37f7x.h"

#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup TIM1 基本定时器(TIM1)
  基本定时器控制器包括 1 个 32 位的定时器，方便用户实现定时控制应用。。<br>
###特性: 
    - 32-位定时器，带 24 位向上计数器和一个 8 位的预分频计数器
    - 定时器都有独立的时钟源
    - 3 种工作模式：单脉冲模式，周期模式和连续计数模式
  @{
*/



/**
 * @brief  定时器1工作模式
 */
typedef enum
{
    TIMER1_MODE_ONE_SHORT = 0x00,                                   /*!<单次模式 */
    TIMER1_MODE_PERIOD = 0x01,                                      /*!<周期模式 */
    TIMER1_MODE_CONTINUE = 0x03,                                    /*!<中断产生后，记数器继续累加 */
} timer1_mode_t;

/**
 * @brief  定时器1配置结构体
 */
typedef struct
{
    enable_state_t int_enable;                                      /*!<中断使能 */
	timer1_mode_t work_mode;                                        /*!<定时器1工作模式 */
	enable_state_t  period_select_enable;                           /*!<周期模式行为选择使能 */
    uint8_t  clk_divide;                                            /*!<定时器时钟分频：0x00 to oxFF */
    uint32_t cmp_cnt;                                               /*!<定时器比较值：0x00 to oxFFFFFF */
} timer1_config_t;

/**@brief		    定时器1初始化
 *
 * @param[in]	    p_timer1_config     定时器1配置结构体
 * @return		    无
*/
void timer1_init (timer1_config_t *p_timer1_config);

/**@brief		    定时器1使能
 *
 * @return		    无
*/
void timer1_enable (void);

/**@brief		    禁止定时器1
 *
 * @return		    无
*/
void timer1_disable (void);

/**@brief		    计时器复位
 *
 * @return		    无
*/
void timer1_counter_reset (void);

/**@brief		    定时器1中断使能
 *
 * @return		    无
*/
void timer1_int_enable (void);

/**@brief		    禁止定时器1中断
 *
 * @return		    无
*/
void timer1_int_disable (void);

/**@brief		    设置定时器1工作模式
 *
 * @param[in]	    work_mode     定时器1工作模式
 * @return		    无
*/
void timer1_mode_set (timer1_mode_t work_mode);

/**@brief		    获取定时器1工作模式
 *
 * @return		    返回定时器1工作模式
*/
timer1_mode_t timer1_mode_get (void);

/**@brief		    读取当前定时器工作状态
 *
 * @return		    当前工作状态，1为工作中，0为未工作
*/
uint8_t timer1_work_state_get (void);

/**@brief		    定时器1周期模式使能
 *
 * @return		    无
*/
void timer1_periodic_sel_enable (void);

/**@brief		    禁止定时器1周期模式
 *
 * @return		    无
*/
void timer1_periodic_sel_disable (void);

/**@brief		    使能实时刷新定时器计数值
 *
 * @return		    无
*/
void timer1_cnt_update_enable (void);

/**@brief		    关闭实时刷新定时器计数值
 *
 * @return		    无
*/
void timer1_cnt_update_disable (void);

/**@brief		    设置定时器1比较值
 *
 * @param[in]	    timer_cmp     待设置的定时器比较值：0x00 to oxFFFFFF
 * @return		    无
*/
void timer1_cmp_set (uint32_t timer_cmp);

/**@brief		    获取定时器1比较值
 *
 * @return		    定时器1比较值
*/
uint32_t timer1_cmp_get (void);

/**@brief		    获取定时器1中断状态
 *
 * @return		    定时器1中断状态
*/
uint8_t timer1_isr_get (void);

/**@brief		    清除定时器1中断状态
 *
 * @return		    无
*/
void timer1_isr_clear (void);

/**@brief		    获取定时器1计数值
 *
 * @return		    定时器1计数值
*/
uint32_t timer1_cnt_get (void);

/*@}*/ /* end of group TIM1 */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_TIMER1_H__


/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/
